# 需求：摆放家具
# 分析：
# 1.需要两个类 ‐‐‐> 两个不同的对象
# 2.两个对象之间有关联关系
# 3.两个对象谁先谁后？  ‐‐‐> 家具在前 （被操作的对象需要先创建）


# 1、类设计：家具
# 类名：HouseItem
# 属性：name  area
# 方法：无
# 类设计：房子
# 类名：House
# 属性：户型、总面积 ‐‐> house_type  total_area
# 方法：添加家具 ‐‐> add_item()
# 2、实现代码
class HouseItem(object):
    def __init__(self, name, area):
        self.name = name
        self.area = area

    def __str__(self):
        return f'{self.name}的面积是： {self.area}平米'

bed = HouseItem('席梦思', 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)


class House(object):
    """房子类"""

    def __init__(self, house_type, total_area):
        """设置房子属性"""
        self.house_type = house_type  # 户型
        self.total_area = total_area  # 面积
        self.free_area = total_area     # 创建房子对象时，总面积就是剩余面积   self.free_area = 剩余面积
        self.item_list = []  # 创建房子对象时，家具列表默认是空    self.item_list = 家具列表
    def add_item(self, item):  # item相当于上述类创建的任何一个家具对象
        """添加家具的方法"""
        # 判断家具面积是否超过剩余面积
        if item.area < self.free_area:
            self.free_area -= item.area
            self.item_list.append(item.name)  # 家具名称相当于其中一个： bed.name
        else:
            print("家具面积过大，无法添加")

    def __str__(self):
        """打印房子对象"""
        return f"户型：{self.house_type}，总面积：{self.total_area}，剩余面积：{self.free_area}，家具名称列表：{self.item_list}"

h1 = House("一室一厅",50)

# 调用方法
h1.add_item(bed)
h1.add_item(chest)
h1.add_item(table)

# 打印
print(h1)